package com.mastercard.assets.web.util.to;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblAssetTipo;
import com.mastercard.assets.jpa.TblCuenta;
import com.mastercard.assets.jpa.TblPaquete;
import com.mastercard.assets.jpa.TblTipoCuenta;
import com.mastercard.assets.jpa.TblPaises;
import com.mastercard.assets.jpa.TblTipoCuentaPaquete;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;

public class ManejadorPaquetesDeAsset
	implements
		Serializable
{
	private PaqueteTO paqueteSLL = new PaqueteTO( "Sencillo" , "Local" , "Local" ) ;
	private PaqueteTO paqueteDLL = new PaqueteTO( "Doble" , "Local" , "Local" ) ;
	private PaqueteTO paqueteSLR = new PaqueteTO( "Sencillo" , "Local" , "Regional" ) ;
	private PaqueteTO paqueteDLR = new PaqueteTO( "Doble" , "Local" , "Regional" ) ;
	private PaqueteTO paqueteSRL = new PaqueteTO( "Sencillo" , "Regional" , "Local" ) ;
	private PaqueteTO paqueteDRL = new PaqueteTO( "Doble" , "Regional" , "Local" ) ;
	private PaqueteTO paqueteSRR = new PaqueteTO( "Sencillo" , "Regional" , "Regional" ) ;
	private PaqueteTO paqueteDRR = new PaqueteTO( "Doble" , "Regional" , "Regional" ) ;
	
	private int cveAsset ;
	
	private int numberOfCountType = 0 ;
	private int numberOfCountryType = 0 ;
	
	private int[ ] tipoCuentaIds = new int[ 0 ] ;
	private String[ ] tipoCuentaNames = new String[ 0 ] ;
        
        private int[ ] paisesIds = new int[ 0 ] ;
	private String[ ] paisesNames = new String[ 0 ] ;
	
	private TipoCuentaPaqueteTO[ ] paquetesAsignadosSLL = new TipoCuentaPaqueteTO[ 0 ] ;
	private TipoCuentaPaqueteTO[ ] paquetesAsignadosDLL = new TipoCuentaPaqueteTO[ 0 ] ;
	private TipoCuentaPaqueteTO[ ] paquetesAsignadosSLR = new TipoCuentaPaqueteTO[ 0 ] ;
	private TipoCuentaPaqueteTO[ ] paquetesAsignadosDLR = new TipoCuentaPaqueteTO[ 0 ] ;
	private TipoCuentaPaqueteTO[ ] paquetesAsignadosSRL = new TipoCuentaPaqueteTO[ 0 ] ;
	private TipoCuentaPaqueteTO[ ] paquetesAsignadosDRL = new TipoCuentaPaqueteTO[ 0 ] ;
	private TipoCuentaPaqueteTO[ ] paquetesAsignadosSRR = new TipoCuentaPaqueteTO[ 0 ] ;
	private TipoCuentaPaqueteTO[ ] paquetesAsignadosDRR = new TipoCuentaPaqueteTO[ 0 ] ;
	
	private int[ ] paquetesAsignadosSLLText = new int[ 0 ] ;
	private int[ ] paquetesAsignadosDLLText = new int[ 0 ] ;
	private int[ ] paquetesAsignadosSLRText = new int[ 0 ] ;
	private int[ ] paquetesAsignadosDLRText = new int[ 0 ] ;
	private int[ ] paquetesAsignadosSRLText = new int[ 0 ] ;
	private int[ ] paquetesAsignadosDRLText = new int[ 0 ] ;
	private int[ ] paquetesAsignadosSRRText = new int[ 0 ] ;
	private int[ ] paquetesAsignadosDRRText = new int[ 0 ] ;
	
	
	
	public int[] getPaquetesAsignadosSLLText() {
		return paquetesAsignadosSLLText;
	}

	public void setPaquetesAsignadosSLLText(int[] paquetesAsignadosSLLText) {
		this.paquetesAsignadosSLLText = paquetesAsignadosSLLText;
	}

	public int[] getPaquetesAsignadosDLLText() {
		return paquetesAsignadosDLLText;
	}

	public void setPaquetesAsignadosDLLText(int[] paquetesAsignadosDLLText) {
		this.paquetesAsignadosDLLText = paquetesAsignadosDLLText;
	}

	public int[] getPaquetesAsignadosSLRText() {
		return paquetesAsignadosSLRText;
	}

	public void setPaquetesAsignadosSLRText(int[] paquetesAsignadosSLRText) {
		this.paquetesAsignadosSLRText = paquetesAsignadosSLRText;
	}

	public int[] getPaquetesAsignadosDLRText() {
		return paquetesAsignadosDLRText;
	}

	public void setPaquetesAsignadosDLRText(int[] paquetesAsignadosDLRText) {
		this.paquetesAsignadosDLRText = paquetesAsignadosDLRText;
	}

	public int[] getPaquetesAsignadosSRLText() {
		return paquetesAsignadosSRLText;
	}

	public void setPaquetesAsignadosSRLText(int[] paquetesAsignadosSRLText) {
		this.paquetesAsignadosSRLText = paquetesAsignadosSRLText;
	}

	public int[] getPaquetesAsignadosDRLText() {
		return paquetesAsignadosDRLText;
	}

	public void setPaquetesAsignadosDRLText(int[] paquetesAsignadosDRLText) {
		this.paquetesAsignadosDRLText = paquetesAsignadosDRLText;
	}

	public int[] getPaquetesAsignadosSRRText() {
		return paquetesAsignadosSRRText;
	}

	public void setPaquetesAsignadosSRRText(int[] paquetesAsignadosSRRText) {
		this.paquetesAsignadosSRRText = paquetesAsignadosSRRText;
	}

	public int[] getPaquetesAsignadosDRRText() {
		return paquetesAsignadosDRRText;
	}

	public void setPaquetesAsignadosDRRText(int[] paquetesAsignadosDRRText) {
		this.paquetesAsignadosDRRText = paquetesAsignadosDRRText;
	}

	public PaqueteTO getPaqueteSLL() {
		return paqueteSLL;
	}

	public PaqueteTO getPaqueteDLL() {
		return paqueteDLL;
	}

	public PaqueteTO getPaqueteSLR() {
		return paqueteSLR;
	}

	public PaqueteTO getPaqueteDLR() {
		return paqueteDLR;
	}

	public PaqueteTO getPaqueteSRL() {
		return paqueteSRL;
	}

	public PaqueteTO getPaqueteDRL() {
		return paqueteDRL;
	}

	public PaqueteTO getPaqueteSRR() {
		return paqueteSRR;
	}

	public PaqueteTO getPaqueteDRR() {
		return paqueteDRR;
	}

	public void addSLL( )
	{
		paqueteSLL.addPackage( ) ;
	}
	
	public void addDLL( )
	{
		paqueteDLL.addPackage( ) ;
	}
	
	public void addSLR( )
	{
		paqueteSLR.addPackage( ) ;
	}
	
	public void addDLR( )
	{
		paqueteDLR.addPackage( ) ;
	}
	
	public void addSRL( )
	{
		paqueteSRL.addPackage( ) ;
	}
	
	public void addDRL( )
	{
		paqueteDRL.addPackage( ) ;
	}
	
	public void addSRR( )
	{
		paqueteSRR.addPackage( ) ;
	}
	
	public void addDRR( )
	{
		paqueteDRR.addPackage( ) ;
	}

	public void addAsignedToCountTypeSLL( )
	{
		paqueteSLL.addAsignedToCountTypePackage( ) ;
	}

	public void addByAsignToCountTypeSLL( )
	{
		paqueteSLL.addByAsignToCountTypePackage( ) ;
	}

	public void addRejectedToCountTypeSLL( )
	{
		paqueteSLL.addRejectedToCountTypePackage( ) ;
	}
	
	public void addAsignedToCountTypeDLL( )
	{
		paqueteDLL.addAsignedToCountTypePackage( ) ;
	}

	public void addByAsignToCountTypeDLL( )
	{
		paqueteDLL.addByAsignToCountTypePackage( ) ;
	}

	public void addRejectedToCountTypeDLL( )
	{
		paqueteDLL.addRejectedToCountTypePackage( ) ;
	}
	
	public void addAsignedToCountTypeSLR( )
	{
		paqueteSLR.addAsignedToCountTypePackage( ) ;
	}

	public void addByAsignToCountTypeSLR( )
	{
		paqueteSLR.addByAsignToCountTypePackage( ) ;
	}

	public void addRejectedToCountTypeSLR( )
	{
		paqueteSLR.addRejectedToCountTypePackage( ) ;
	}
	
	public void addAsignedToCountTypeDLR( )
	{
		paqueteDLR.addAsignedToCountTypePackage( ) ;
	}

	public void addByAsignToCountTypeDLR( )
	{
		paqueteDLR.addByAsignToCountTypePackage( ) ;
	}

	public void addRejectedToCountTypeDLR( )
	{
		paqueteDLR.addRejectedToCountTypePackage( ) ;
	}
	
	public void addAsignedToCountTypeSRL( )
	{
		paqueteSRL.addAsignedToCountTypePackage( ) ;
	}

	public void addByAsignToCountTypeSRL( )
	{
		paqueteSRL.addByAsignToCountTypePackage( ) ;
	}

	public void addRejectedToCountTypeSRL( )
	{
		paqueteSRL.addRejectedToCountTypePackage( ) ;
	}
	
	public void addAsignedToCountTypeDRL( )
	{
		paqueteDRL.addAsignedToCountTypePackage( ) ;
	}

	public void addByAsignToCountTypeDRL( )
	{
		paqueteDRL.addByAsignToCountTypePackage( ) ;
	}

	public void addRejectedToCountTypeDRL( )
	{
		paqueteDRL.addRejectedToCountTypePackage( ) ;
	}
	
	public void addAsignedToCountTypeSRR( )
	{
		paqueteSRR.addAsignedToCountTypePackage( ) ;
	}

	public void addByAsignToCountTypeSRR( )
	{
		paqueteSRR.addByAsignToCountTypePackage( ) ;
	}

	public void addRejectedToCountTypeSRR( )
	{
		paqueteSRR.addRejectedToCountTypePackage( ) ;
	}
	
	public void addAsignedToCountTypeDRR( )
	{
		paqueteDRR.addAsignedToCountTypePackage( ) ;
	}

	public void addByAsignToCountTypeDRR( )
	{
		paqueteDRR.addByAsignToCountTypePackage( ) ;
	}

	public void addRejectedToCountTypeDRR( )
	{
		paqueteDRR.addRejectedToCountTypePackage( ) ;
	}

	
	

	public void addAsignedToCountSLL( )
	{
		paqueteSLL.addAsignedToCountPackage( ) ;
	}

	public void addNoAsignedToCountSLL( )
	{
		paqueteSLL.addNoAsignedToCountPackage( ) ;
	}

	public void addInProccesOfAuthInCountSLL( )
	{
		paqueteSLL.addInProccesOfAuthInCountPackage( ) ;
	}
	
	public void addAsignedToCountDLL( )
	{
		paqueteDLL.addAsignedToCountPackage( ) ;
	}

	public void addNoAsignedToCountDLL( )
	{
		paqueteDLL.addNoAsignedToCountPackage( ) ;
	}

	public void addInProccesOfAuthInCountDLL( )
	{
		paqueteDLL.addInProccesOfAuthInCountPackage( ) ;
	}
	
	public void addAsignedToCountSLR( )
	{
		paqueteSLR.addAsignedToCountPackage( ) ;
	}

	public void addNoAsignedToCountSLR( )
	{
		paqueteSLR.addNoAsignedToCountPackage( ) ;
	}

	public void addInProccesOfAuthInCountSLR( )
	{
		paqueteSLR.addInProccesOfAuthInCountPackage( ) ;
	}
	
	public void addAsignedToCountDLR( )
	{
		paqueteDLR.addAsignedToCountPackage( ) ;
	}

	public void addNoAsignedToCountDLR( )
	{
		paqueteDLR.addNoAsignedToCountPackage( ) ;
	}

	public void addInProccesOfAuthInCountDLR( )
	{
		paqueteDLR.addInProccesOfAuthInCountPackage( ) ;
	}
	
	public void addAsignedToCountSRL( )
	{
		paqueteSRL.addAsignedToCountPackage( ) ;
	}

	public void addNoAsignedToCountSRL( )
	{
		paqueteSRL.addNoAsignedToCountPackage( ) ;
	}

	public void addInProccesOfAuthInCountSRL( )
	{
		paqueteSRL.addInProccesOfAuthInCountPackage( ) ;
	}
	
	public void addAsignedToCountDRL( )
	{
		paqueteDRL.addAsignedToCountPackage( ) ;
	}

	public void addNoAsignedToCountDRL( )
	{
		paqueteDRL.addNoAsignedToCountPackage( ) ;
	}

	public void addInProccesOfAuthInCountDRL( )
	{
		paqueteDRL.addInProccesOfAuthInCountPackage( ) ;
	}
	
	public void addAsignedToCountSRR( )
	{
		paqueteSRR.addAsignedToCountPackage( ) ;
	}

	public void addNoAsignedToCountSRR( )
	{
		paqueteSRR.addNoAsignedToCountPackage( ) ;
	}

	public void addInProccesOfAuthInCountSRR( )
	{
		paqueteSRR.addInProccesOfAuthInCountPackage( ) ;
	}
	
	public void addAsignedToCountDRR( )
	{
		paqueteDRR.addAsignedToCountPackage( ) ;
	}

	public void addNoAsignedToCountDRR( )
	{
		paqueteDRR.addNoAsignedToCountPackage( ) ;
	}

	public void addInProccesOfAuthInCountDRR( )
	{
		paqueteDRR.addInProccesOfAuthInCountPackage( ) ;
	}
	
	public void reset( )
	{
//		System.out.println( "Resetea!!!!" ) ;
		paqueteSLL.setCantidad( 0 ) ;
		paqueteSLR.setCantidad( 0 ) ;
		paqueteDLL.setCantidad( 0 ) ;
		paqueteDLR.setCantidad( 0 ) ;
		paqueteSRL.setCantidad( 0 ) ;
		paqueteSRR.setCantidad( 0 ) ;
		paqueteDRL.setCantidad( 0 ) ;
		paqueteDRR.setCantidad( 0 ) ;
		
//		tipoCuentaIds = new int[ 0 ] ;
//		tipoCuentaNames = new String[ 0 ] ;
//		
		paquetesAsignadosSLL = new TipoCuentaPaqueteTO[ 0 ] ;
		paquetesAsignadosDLL = new TipoCuentaPaqueteTO[ 0 ] ;
		paquetesAsignadosSLR = new TipoCuentaPaqueteTO[ 0 ] ;
		paquetesAsignadosDLR = new TipoCuentaPaqueteTO[ 0 ] ;
		paquetesAsignadosSRL = new TipoCuentaPaqueteTO[ 0 ] ;
		paquetesAsignadosDRL = new TipoCuentaPaqueteTO[ 0 ] ;
		paquetesAsignadosSRR = new TipoCuentaPaqueteTO[ 0 ] ;
		paquetesAsignadosDRR = new TipoCuentaPaqueteTO[ 0 ] ;
		
	}
	
	public int getPackageAsigned( )
	{
		// suma todos
		int asigned = 0 ;
		
		asigned += paqueteSLL.getAsignadosATipoCuenta( ) ;
		asigned += paqueteSLR.getAsignadosATipoCuenta( ) ;
		asigned += paqueteDLL.getAsignadosATipoCuenta( ) ;
		asigned += paqueteDLR.getAsignadosATipoCuenta( ) ;
		asigned += paqueteSRL.getAsignadosATipoCuenta( ) ;
		asigned += paqueteSRR.getAsignadosATipoCuenta( ) ;
		asigned += paqueteDRL.getAsignadosATipoCuenta( ) ;
		asigned += paqueteDRR.getAsignadosATipoCuenta( ) ;
		
		return asigned ;
	}
	
	public int getPackagetToAsign( )
	{
		// suma todos
		int asigned = 0 ;
		
		asigned += paqueteSLL.getPorAsignarATipoCuenta( ) ;
		asigned += paqueteSLR.getPorAsignarATipoCuenta( ) ;
		asigned += paqueteDLL.getPorAsignarATipoCuenta( ) ;
		asigned += paqueteDLR.getPorAsignarATipoCuenta( ) ;
		asigned += paqueteSRL.getPorAsignarATipoCuenta( ) ;
		asigned += paqueteSRR.getPorAsignarATipoCuenta( ) ;
		asigned += paqueteDRL.getPorAsignarATipoCuenta( ) ;
		asigned += paqueteDRR.getPorAsignarATipoCuenta( ) ;
		
		return asigned ;
	}
	
	public int getPackagetRejected( )
	{
		// suma todos
		int asigned = 0 ;
		
		asigned += paqueteSLL.getRechazadosATipoCuenta( ) ;
		asigned += paqueteSLR.getRechazadosATipoCuenta( ) ;
		asigned += paqueteDLL.getRechazadosATipoCuenta( ) ;
		asigned += paqueteDLR.getRechazadosATipoCuenta( ) ;
		asigned += paqueteSRL.getRechazadosATipoCuenta( ) ;
		asigned += paqueteSRR.getRechazadosATipoCuenta( ) ;
		asigned += paqueteDRL.getRechazadosATipoCuenta( ) ;
		asigned += paqueteDRR.getRechazadosATipoCuenta( ) ;
		
		return asigned ;
	}
	
	public int getQuantityOfPackage( )
	{
		// suma todos
		int cantidad = 0 ;
//		System.out.println(
//				paqueteSLL.getCantidad( ) + " - " + 
//				paqueteSLR.getCantidad( ) + " - " + 
//				paqueteDLL.getCantidad( ) + " - " + 
//				paqueteDLR.getCantidad( ) + " - " + 
//				paqueteSRL.getCantidad( ) + " - " + 
//				paqueteSRR.getCantidad( ) + " - " + 
//				paqueteDRL.getCantidad( ) + " - " + 
//				paqueteDRR.getCantidad( ) + " - "  
//				) ;
		cantidad += paqueteSLL.getCantidad( ) ;
		cantidad += paqueteSLR.getCantidad( ) ;
		cantidad += paqueteDLL.getCantidad( ) ;
		cantidad += paqueteDLR.getCantidad( ) ;
		cantidad += paqueteSRL.getCantidad( ) ;
		cantidad += paqueteSRR.getCantidad( ) ;
		cantidad += paqueteDRL.getCantidad( ) ;
		cantidad += paqueteDRR.getCantidad( ) ;
		
//		System.out.println( cantidad ) ;
		
		return cantidad ;
	}
        
        public void setCountryTypes( List< TblPaises > countryTypes ){
                if( countryTypes == null )
			return ;
                
                numberOfCountryType = countryTypes.size( ) ;
		
		paisesIds = new int[ numberOfCountryType ] ;
		paisesNames = new String[ numberOfCountryType ] ;
                
                for( int i = 0 ; i < numberOfCountryType ; i++ )
		{
			TblPaises pais = countryTypes.get( i ) ;
                }
        }
	
	public void setCountTypes( List< TblTipoCuenta > countTypes )
	{
		if( countTypes == null )
			return ;
		
//		System.out.println( "Tamanio dentro: " + countTypes.size( ) ) ;
//
		// asigna el numero de cuenta numero
		numberOfCountType = countTypes.size( ) ;
		
		tipoCuentaIds = new int[ numberOfCountType ] ;
		tipoCuentaNames = new String[ numberOfCountType ] ;
		
		if( paquetesAsignadosSLL == null || paquetesAsignadosSLL.length != numberOfCountType )
			paquetesAsignadosSLL = new TipoCuentaPaqueteTO[ numberOfCountType ] ;
		if( paquetesAsignadosDLL == null || paquetesAsignadosDLL.length != numberOfCountType )
			paquetesAsignadosDLL = new TipoCuentaPaqueteTO[ numberOfCountType ] ;
		if( paquetesAsignadosSLR == null || paquetesAsignadosSLR.length != numberOfCountType )
			paquetesAsignadosSLR = new TipoCuentaPaqueteTO[ numberOfCountType ] ;
		if( paquetesAsignadosDLR == null || paquetesAsignadosDLR.length != numberOfCountType )
			paquetesAsignadosDLR = new TipoCuentaPaqueteTO[ numberOfCountType ] ;
		if( paquetesAsignadosSRL == null || paquetesAsignadosSRL.length != numberOfCountType )
			paquetesAsignadosSRL = new TipoCuentaPaqueteTO[ numberOfCountType ] ;
		if( paquetesAsignadosDRL == null || paquetesAsignadosDRL.length != numberOfCountType )
			paquetesAsignadosDRL = new TipoCuentaPaqueteTO[ numberOfCountType ] ;
		if( paquetesAsignadosSRR == null || paquetesAsignadosSRR.length != numberOfCountType )
			paquetesAsignadosSRR = new TipoCuentaPaqueteTO[ numberOfCountType ] ;
		if( paquetesAsignadosDRR == null || paquetesAsignadosDRR.length != numberOfCountType )
			paquetesAsignadosDRR = new TipoCuentaPaqueteTO[ numberOfCountType ] ;
//		try
//		{
//		System.out.println( "Numero : " + numberOfCountType ) ;
		for( int i = 0 ; i < numberOfCountType ; i++ )
		{
			TblTipoCuenta tipoCuenta = countTypes.get( i ) ;
//			System.out.println( "\tId : " + tipoCuenta.getCveTipoCuenta( ) ) ;
//			System.out.println( "\tNombre : " + tipoCuenta.getNombre( ) ) ;
			// asigna ids
			tipoCuentaIds[ i ] = tipoCuenta.getCveTipoCuenta( ) ;
			tipoCuentaNames[ i ] = tipoCuenta.getNombre( ) ;
			paquetesAsignadosSLL[ i ] = new TipoCuentaPaqueteTO( tipoCuenta.getNombre( ) ) ;
			paquetesAsignadosSLR[ i ] = new TipoCuentaPaqueteTO( tipoCuenta.getNombre( ) ) ;
			paquetesAsignadosDLL[ i ] = new TipoCuentaPaqueteTO( tipoCuenta.getNombre( ) ) ;
			paquetesAsignadosDLR[ i ] = new TipoCuentaPaqueteTO( tipoCuenta.getNombre( ) ) ;
			paquetesAsignadosSRL[ i ] = new TipoCuentaPaqueteTO( tipoCuenta.getNombre( ) ) ;
			paquetesAsignadosSRR[ i ] = new TipoCuentaPaqueteTO( tipoCuenta.getNombre( ) ) ;
			paquetesAsignadosDRL[ i ] = new TipoCuentaPaqueteTO( tipoCuenta.getNombre( ) ) ;
			paquetesAsignadosDRR[ i ] = new TipoCuentaPaqueteTO( tipoCuenta.getNombre( ) ) ;
			
			// toma los tipocuentaspaquetes
			List< TblTipoCuentaPaquete > tipoCuentaPaquetes = tipoCuenta.getTblTipoCuentaPaquetes( ) ;
			
			// recorre
			for( TblTipoCuentaPaquete tipoCuentaPaquete : tipoCuentaPaquetes )
			{
				// en caso de que status sea 0
				if( tipoCuentaPaquete.getStatus( ) == 0 )
					continue ;
				
				// toma el pquete
				TblPaquete paq = tipoCuentaPaquete.getTblPaquete( ) ;
				
				if( paq == null || paq.getTblAsset( ) == null )
					continue ;
				
				// en caso de que sea el mismo asset
				if( paq != null && paq.getTblAsset( ).getCveAsset( ) == cveAsset )
				{
					int status = paq.getStatus( ) ;
					
					if( status == 0 )
						continue ;
					
					// en caso de que este habilitado
					int tipoHabitacion = paq.getHabitacion( ) ;
					int fondeadoA = paq.getFondeado( ) ;
					int facturadoA = paq.getFacturadoA( ) ;
					int bandera = paq.getBandera( ) ;
					
//					if( status == 1 )
//					{
					
						// en caso de que sea SLL
						if( tipoHabitacion == 1 && fondeadoA == 1 && facturadoA == 1 )
						{
							paquetesAsignadosSLL[ i ].addAsignedPackage( ) ;
							
							if( bandera == 2 || bandera == 3 )
								paquetesAsignadosSLL[ i ].addAsignedToCountPackage( ) ;
						}
						
						// en caso de que sea SLR
						if( tipoHabitacion == 1 && fondeadoA == 1 && facturadoA == 2 )
						{
							paquetesAsignadosSLR[ i ].addAsignedPackage( ) ;
							
							if( bandera == 2 || bandera == 3 )
								paquetesAsignadosSLR[ i ].addAsignedToCountPackage( ) ;
						}
						
						// en caso de que sea DLL
						if( tipoHabitacion == 2 && fondeadoA == 1 && facturadoA == 1 )
						{
							paquetesAsignadosDLL[ i ].addAsignedPackage( ) ;
							
							if( bandera == 2 || bandera == 3 )
								paquetesAsignadosDLL[ i ].addAsignedToCountPackage( ) ;
						}
						
						// en caso de que sea DLR
						if( tipoHabitacion == 2 && fondeadoA == 1 && facturadoA == 2 )
						{
							paquetesAsignadosDLR[ i ].addAsignedPackage( ) ;
							
							if( bandera == 2 || bandera == 3 )
								paquetesAsignadosDLR[ i ].addAsignedToCountPackage( ) ;
						}
						
						// en caso de que sea SRL
						if( tipoHabitacion == 1 && fondeadoA == 2 && facturadoA == 1 )
						{
							paquetesAsignadosSRL[ i ].addAsignedPackage( ) ;
							
							if( bandera == 2 || bandera == 3 )
								paquetesAsignadosSRL[ i ].addAsignedToCountPackage( ) ;
						}
						
						// en caso de que sea SRR
						if( tipoHabitacion == 1 && fondeadoA == 2 && facturadoA == 2 )
						{
							paquetesAsignadosSRR[ i ].addAsignedPackage( ) ;
							
							if( bandera == 2 || bandera == 3 )
								paquetesAsignadosSRR[ i ].addAsignedToCountPackage( ) ;
						}
						
						// en caso de que sea DRL
						if( tipoHabitacion == 2 && fondeadoA == 2 && facturadoA == 1 )
						{
							paquetesAsignadosDRL[ i ].addAsignedPackage( ) ;
							
							if( bandera == 2 || bandera == 3 )
								paquetesAsignadosDRL[ i ].addAsignedToCountPackage( ) ;
						}
						
						// en caso de que sea DRR
						if( tipoHabitacion == 2 && fondeadoA == 2 && facturadoA == 2 )
						{
							paquetesAsignadosDRR[ i ].addAsignedPackage( ) ;
							
							if( bandera == 2 || bandera == 3 )
								paquetesAsignadosDRR[ i ].addAsignedToCountPackage( ) ;
						}
//					}
				}
			}
			
//			// toma los assettipo
//			List< TblAssetTipo > assetTipos = tipoCuenta.getTblAssetTipos( ) ;
//			
			// recorre
//			for( TblAssetTipo assetTipo : assetTipos )
//			{
//				// toma el paquete
//				TblPaquete paq = assetTipo.getTblPaquete( ) ;
//				
//				// verifica el Asset al que pertenece
//				TblAsset asset = paq.getTblAsset( ) ;
//				
//				System.out.println( "SetCountTypes: cveAsset " + cveAsset ) ;
//				System.out.println( "SetCountTypes: paq " + paq.getCvePaquete( ) ) ;
//				System.out.println( "SetCountTypes: asset " + asset.getCveAsset( ) ) ;
//				
//				// en caso d que coincida la clave
//				if( asset.getCveAsset( ) == cveAsset )
//				{
//					int status = assetTipo.getStatus( ) ;
//					
//					// en caso de que este habilitado
//					int tipoHabitacion = paq.getHabitacion( ) ;
//					int fondeadoA = paq.getFondeado( ) ;
//					int facturadoA = paq.getFacturadoA( ) ;
//					
////					if( status == 1 )
////					{
//					
//						// en caso de que sea SLL
//						if( tipoHabitacion == 1 && fondeadoA == 1 && facturadoA == 1 )
//							paqueteSLL.addAsignedPackage( ) ;
//						
//						// en caso de que sea SLR
//						if( tipoHabitacion == 1 && fondeadoA == 1 && facturadoA == 2 )
//							paqueteSLR.addAsignedPackage( ) ;
//						
//						// en caso de que sea DLL
//						if( tipoHabitacion == 2 && fondeadoA == 1 && facturadoA == 1 )
//							paqueteDLL.addAsignedPackage( ) ;
//						
//						// en caso de que sea DLR
//						if( tipoHabitacion == 2 && fondeadoA == 1 && facturadoA == 2 )
//							paqueteDLR.addAsignedPackage( ) ;
//	
//						
//						// en caso de que sea SRL
//						if( tipoHabitacion == 1 && fondeadoA == 2 && facturadoA == 1 )
//							paqueteSRL.addAsignedPackage( ) ;
//						
//						// en caso de que sea SRR
//						if( tipoHabitacion == 1 && fondeadoA == 2 && facturadoA == 2 )
//							paqueteSRR.addAsignedPackage( ) ;
//						
//						// en caso de que sea DRL
//						if( tipoHabitacion == 2 && fondeadoA == 2 && facturadoA == 1 )
//							paqueteDRL.addAsignedPackage( ) ;
//						
//						// en caso de que sea DRR
//						if( tipoHabitacion == 2 && fondeadoA == 2 && facturadoA == 2 )
//							paqueteDRR.addAsignedPackage( ) ;
////					}
//				}
//			}
			
		}
//		}catch( Exception e )
//		{
//			e.printStackTrace( ) ;
//		}
//		
//		System.out.println( "Tamanio: " + tipoCuentaIds.length + " - " + tipoCuentaNames.length ) ;
	}

	public int getNumberOfCountType() {
		return numberOfCountType;
	}

	public int[] getTipoCuentaIds() {
		return tipoCuentaIds;
	}

	public String[] getTipoCuentaNames() {
		return tipoCuentaNames;
	}

	public TipoCuentaPaqueteTO[] getPaquetesAsignadosSLL() {
		return paquetesAsignadosSLL;
	}

	public TipoCuentaPaqueteTO[] getPaquetesAsignadosDLL() {
		return paquetesAsignadosDLL;
	}

	public TipoCuentaPaqueteTO[] getPaquetesAsignadosSLR() {
		return paquetesAsignadosSLR;
	}

	public TipoCuentaPaqueteTO[] getPaquetesAsignadosDLR() {
		return paquetesAsignadosDLR;
	}

	public TipoCuentaPaqueteTO[] getPaquetesAsignadosSRL() {
		return paquetesAsignadosSRL;
	}

	public TipoCuentaPaqueteTO[] getPaquetesAsignadosDRL() {
		return paquetesAsignadosDRL;
	}

	public TipoCuentaPaqueteTO[] getPaquetesAsignadosSRR() {
		return paquetesAsignadosSRR;
	}

	public TipoCuentaPaqueteTO[] getPaquetesAsignadosDRR() {
		return paquetesAsignadosDRR;
	}

	public void setNumberOfCountType(int numberOfCountType) {
//		System.out.println( "Numero de cuentas: " + numberOfCountType ) ;
		this.numberOfCountType = numberOfCountType;
	}

	public void setTipoCuentaIds(int[] tipoCuentaIds) {
		this.tipoCuentaIds = tipoCuentaIds;
	}

	public void setTipoCuentaNames(String[] tipoCuentaNames) {
		this.tipoCuentaNames = tipoCuentaNames;
	}

	public void setPaquetesAsignadosSLL(TipoCuentaPaqueteTO[] paquetesAsignadosSLL) {
		this.paquetesAsignadosSLL = paquetesAsignadosSLL;
	}

	public void setPaquetesAsignadosDLL(TipoCuentaPaqueteTO[] paquetesAsignadosDLL) {
		this.paquetesAsignadosDLL = paquetesAsignadosDLL;
	}

	public void setPaquetesAsignadosSLR(TipoCuentaPaqueteTO[] paquetesAsignadosSLR) {
		this.paquetesAsignadosSLR = paquetesAsignadosSLR;
	}

	public void setPaquetesAsignadosDLR(TipoCuentaPaqueteTO[] paquetesAsignadosDLR) {
		this.paquetesAsignadosDLR = paquetesAsignadosDLR;
	}

	public void setPaquetesAsignadosSRL(TipoCuentaPaqueteTO[] paquetesAsignadosSRL) {
		this.paquetesAsignadosSRL = paquetesAsignadosSRL;
	}

	public void setPaquetesAsignadosDRL(TipoCuentaPaqueteTO[] paquetesAsignadosDRL) {
		this.paquetesAsignadosDRL = paquetesAsignadosDRL;
	}

	public void setPaquetesAsignadosSRR(TipoCuentaPaqueteTO[] paquetesAsignadosSRR) {
		this.paquetesAsignadosSRR = paquetesAsignadosSRR;
	}

	public void setPaquetesAsignadosDRR(TipoCuentaPaqueteTO[] paquetesAsignadosDRR) {
		this.paquetesAsignadosDRR = paquetesAsignadosDRR;
	}

	/////////////
	
	public void setPaqueteSLL(PaqueteTO paqueteSLL) {
		this.paqueteSLL = paqueteSLL;
	}

	public void setPaqueteDLL(PaqueteTO paqueteDLL) {
		this.paqueteDLL = paqueteDLL;
	}

	public void setPaqueteSLR(PaqueteTO paqueteSLR) {
		this.paqueteSLR = paqueteSLR;
	}

	public void setPaqueteDLR(PaqueteTO paqueteDLR) {
		this.paqueteDLR = paqueteDLR;
	}

	public void setPaqueteSRL(PaqueteTO paqueteSRL) {
		this.paqueteSRL = paqueteSRL;
	}

	public void setPaqueteDRL(PaqueteTO paqueteDRL) {
		this.paqueteDRL = paqueteDRL;
	}

	public void setPaqueteSRR(PaqueteTO paqueteSRR) {
		this.paqueteSRR = paqueteSRR;
	}

	public void setPaqueteDRR(PaqueteTO paqueteDRR) {
		this.paqueteDRR = paqueteDRR;
	}

	public int getCveAsset() {
		return cveAsset;
	}

	public void setCveAsset(int cveAsset) {
		
		this.cveAsset = cveAsset;
		
		if( cveAsset > 0 )
		{
			System.out.println( "Asset @@@@@@@ " + cveAsset ) ;
			// toma los elementos encontrados
//			TblAsset asset = MasterCardDAO.findAssetById( cveAsset ) ;
			
			List< TblPaquete > packages = MasterCardDAO.getAllPackagesOfAsset( cveAsset , 1 ) ;
//			MasterCardDAO.closeEntityManager( ) ;
			// en caso de package en null o vacio
			if( packages == null || packages.size( ) == 0 )
			{
				return ;
			}
			
			System.out.println( "Num de paquetes: " + packages.size( ) ) ;
			
			// recorre los packages
			for( TblPaquete paquete : packages )
			{
				// en caso de que el paquete este desactivado
				if( paquete.getStatus( ) == 0 )
					continue ;
				
				System.out.println( "Paquete: " + paquete.getCvePaquete( ) + " - " + paquete.getTblAsset( ).getCveAsset( ) + " - " + paquete.getBandera( ) + " - " + paquete.getHabitacion( ) + " - " + paquete.getFondeado( ) + " - " + paquete.getFacturadoA( ) ) ;
				// verifica que tipo de paquete es
				// obtiene los datos
				int tipoHabitacion = paquete.getHabitacion( ) ;
				int fondeadoA = paquete.getFondeado( ) ;
				int facturadoA = paquete.getFacturadoA( ) ;
				int bandera = paquete.getBandera( ) ;
//				System.out.println( "Paquete: " + tipoHabitacion + " - " + fondeadoA + " - " + facturadoA + " - " + paquete.getStatus( ) ) ;
				
				// en caso de que el paquete este desactivado
				if( paquete.getStatus( ) == 0 )
					continue ;
				
				System.out.println( "Paquete: " + tipoHabitacion + "-" + fondeadoA + "-" + facturadoA + ": " + bandera ) ;
				
				// en caso de que sea SLL
				if( tipoHabitacion == 1 && fondeadoA == 1 && facturadoA == 1 )
				{
					if( bandera == 2 )
						addAsignedToCountTypeSLL( ) ;
					if( bandera == 1 )
						addByAsignToCountTypeSLL( ) ;
					if( bandera == 3 )
						addRejectedToCountTypeSLL( ) ;
					addSLL( ) ;
					
					List< TblTipoCuentaPaquete > tipoCuentasPaquete = paquete.getTblTipoCuentaPaquetes( ) ;
					
					System.out.println( "\tTipoCuentaPaquetes: " + tipoCuentasPaquete.size( ) ) ;
					
					// recorre
					for( TblTipoCuentaPaquete tcp : tipoCuentasPaquete )
					{
						if( tcp.getStatus( ) == 0 )
							continue ;
						
						System.out.println( "\tTipoCuentaPaquetes: " + tcp.getBandera( ) ) ;
						// bandera
						int banderaTCP = tcp.getBandera( ) ;
						
						if( banderaTCP == 1 )
							addNoAsignedToCountSLL( ) ;
						if( banderaTCP == 2 )
							addInProccesOfAuthInCountSLL( ) ;
						if( banderaTCP == 3 )
							addAsignedToCountSLL( ) ;
					}
					
				}
				
				// en caso de que sea SLR
				if( tipoHabitacion == 1 && fondeadoA == 1 && facturadoA == 2 )
				{
					if( bandera == 2 )
						addAsignedToCountTypeSLR( ) ;
					if( bandera == 1 )
						addByAsignToCountTypeSLR( ) ;
					if( bandera == 3 )
						addRejectedToCountTypeSLR( ) ;
					addSLR( ) ;
					
					List< TblTipoCuentaPaquete > tipoCuentasPaquete = paquete.getTblTipoCuentaPaquetes( ) ;
					
					// recorre
					for( TblTipoCuentaPaquete tcp : tipoCuentasPaquete )
					{
						if( tcp.getStatus( ) == 0 )
							continue ;
						
						// bandera
						int banderaTCP = tcp.getBandera( ) ;
						
						if( banderaTCP == 1 )
							addNoAsignedToCountSLR( ) ;
						if( banderaTCP == 2 )
							addInProccesOfAuthInCountSLR( ) ;
						if( banderaTCP == 3 )
							addAsignedToCountSLR( ) ;
					}
					
				}
				
				// en caso de que sea DLL
				if( tipoHabitacion == 2 && fondeadoA == 1 && facturadoA == 1 )
				{
					if( bandera == 2 )
						addAsignedToCountTypeDLL( ) ;
					if( bandera == 1 )
						addByAsignToCountTypeDLL( ) ;
					if( bandera == 3 )
						addRejectedToCountTypeDLL( ) ;
					addDLL( ) ;
					
					List< TblTipoCuentaPaquete > tipoCuentasPaquete = paquete.getTblTipoCuentaPaquetes( ) ;
					
					// recorre
					for( TblTipoCuentaPaquete tcp : tipoCuentasPaquete )
					{
						if( tcp.getStatus( ) == 0 )
							continue ;
						
						// bandera
						int banderaTCP = tcp.getBandera( ) ;
						
						if( banderaTCP == 1 )
							addNoAsignedToCountDLL( ) ;
						if( banderaTCP == 2 )
							addInProccesOfAuthInCountDLL( ) ;
						if( banderaTCP == 3 )
							addAsignedToCountDLL( ) ;
					}
					
				}
				
				// en caso de que sea DLR
				if( tipoHabitacion == 2 && fondeadoA == 1 && facturadoA == 2 )
				{
					if( bandera == 2 )
						addAsignedToCountTypeDLR( ) ;
					if( bandera == 1 )
						addByAsignToCountTypeDLR( ) ;
					if( bandera == 3 )
						addRejectedToCountTypeDLR( ) ;
					addDLR( ) ;
					
					List< TblTipoCuentaPaquete > tipoCuentasPaquete = paquete.getTblTipoCuentaPaquetes( ) ;
					
					// recorre
					for( TblTipoCuentaPaquete tcp : tipoCuentasPaquete )
					{
						if( tcp.getStatus( ) == 0 )
							continue ;
						
						// bandera
						int banderaTCP = tcp.getBandera( ) ;
						
						if( banderaTCP == 1 )
							addNoAsignedToCountDLR( ) ;
						if( banderaTCP == 2 )
							addInProccesOfAuthInCountDLR( ) ;
						if( banderaTCP == 3 )
							addAsignedToCountDLR( ) ;
					}
					
				}

				
				// en caso de que sea SRL
				if( tipoHabitacion == 1 && fondeadoA == 2 && facturadoA == 1 )
				{
					if( bandera == 2 )
						addAsignedToCountTypeSRL( ) ;
					if( bandera == 1 )
						addByAsignToCountTypeSRL( ) ;
					if( bandera == 3 )
						addRejectedToCountTypeSRL( ) ;
					addSRL( ) ;
					
					List< TblTipoCuentaPaquete > tipoCuentasPaquete = paquete.getTblTipoCuentaPaquetes( ) ;
					
					// recorre
					for( TblTipoCuentaPaquete tcp : tipoCuentasPaquete )
					{
						if( tcp.getStatus( ) == 0 )
							continue ;
						
						// bandera
						int banderaTCP = tcp.getBandera( ) ;
						
						if( banderaTCP == 1 )
							addNoAsignedToCountSRL( ) ;
						if( banderaTCP == 2 )
							addInProccesOfAuthInCountSRL( ) ;
						if( banderaTCP == 3 )
							addAsignedToCountSRL( ) ;
					}
					
				}
				
				// en caso de que sea SRR
				if( tipoHabitacion == 1 && fondeadoA == 2 && facturadoA == 2 )
				{
					if( bandera == 2 )
						addAsignedToCountTypeSRR( ) ;
					if( bandera == 1 )
						addByAsignToCountTypeSRR( ) ;
					if( bandera == 3 )
						addRejectedToCountTypeSRR( ) ;
					addSRR( ) ;
					
					List< TblTipoCuentaPaquete > tipoCuentasPaquete = paquete.getTblTipoCuentaPaquetes( ) ;
					
					// recorre
					for( TblTipoCuentaPaquete tcp : tipoCuentasPaquete )
					{
						if( tcp.getStatus( ) == 0 )
							continue ;
						
						// bandera
						int banderaTCP = tcp.getBandera( ) ;
						
						if( banderaTCP == 1 )
							addNoAsignedToCountSRR( ) ;
						if( banderaTCP == 2 )
							addInProccesOfAuthInCountSRR( ) ;
						if( banderaTCP == 3 )
							addAsignedToCountSRR( ) ;
					}
					
				}
				
				// en caso de que sea DRL
				if( tipoHabitacion == 2 && fondeadoA == 2 && facturadoA == 1 )
				{
					if( bandera == 2 )
						addAsignedToCountTypeDRL( ) ;
					if( bandera == 1 )
						addByAsignToCountTypeDRL( ) ;
					if( bandera == 3 )
						addRejectedToCountTypeDRL( ) ;
					addDRL( ) ;
					
					List< TblTipoCuentaPaquete > tipoCuentasPaquete = paquete.getTblTipoCuentaPaquetes( ) ;
					
					// recorre
					for( TblTipoCuentaPaquete tcp : tipoCuentasPaquete )
					{
						if( tcp.getStatus( ) == 0 )
							continue ;
						
						// en caso de que status sea 0
						if( tcp.getStatus( ) == 0 )
							continue ;
						
						// bandera
						int banderaTCP = tcp.getBandera( ) ;
						
						if( banderaTCP == 1 )
							addNoAsignedToCountDRL( ) ;
						if( banderaTCP == 2 )
							addInProccesOfAuthInCountDRL( ) ;
						if( banderaTCP == 3 )
							addAsignedToCountDRL( ) ;
					}
					
				}
				
				// en caso de que sea DRR
				if( tipoHabitacion == 2 && fondeadoA == 2 && facturadoA == 2 )
				{
					if( bandera == 2 )
						addAsignedToCountTypeDRR( ) ;
					if( bandera == 1 )
						addByAsignToCountTypeDRR( ) ;
					if( bandera == 3 )
						addRejectedToCountTypeDRR( ) ;
					addDRR( ) ;
					
					List< TblTipoCuentaPaquete > tipoCuentasPaquete = paquete.getTblTipoCuentaPaquetes( ) ;
					
					// recorre
					for( TblTipoCuentaPaquete tcp : tipoCuentasPaquete )
					{
						if( tcp.getStatus( ) == 0 )
							continue ;
						
						// bandera
						int banderaTCP = tcp.getBandera( ) ;
						
						if( banderaTCP == 1 )
							addNoAsignedToCountDRR( ) ;
						if( banderaTCP == 2 )
							addInProccesOfAuthInCountDRR( ) ;
						if( banderaTCP == 3 )
							addAsignedToCountDRR( ) ;
					}
					
				}
			}
			
			System.out.println( "Sale del for" ) ;
			
			// actualiza los paquetes
//			MCUtil.updatePackageManager( MasterCardDAO.getAllPackagesOfAsset( asset.getCveAsset( ) , 1 ) , this ) ;
			
			try
			{
				// coloca os tipos de cuenta existentes
				List< TblTipoCuenta > tipoCuentas = MasterCardDAO.getAllActiveCountTypes( ) ;
//				MasterCardDAO.closeEntityManager( ) ;
				System.out.println( "Tamanio Tipo Cuentas****: " + tipoCuentas.size( ) ) ;
				
				// resultado de tipo de cuentas
				List< TblTipoCuenta > tipoCuentasRes = new ArrayList< TblTipoCuenta >( ) ;
				
//				System.out.println( "Tamanio: " + tipoCuentasRes.size( ) ) ;
//				
				// recorre
				for( TblTipoCuenta tc : tipoCuentas )
				{
					// en caso de que status sea 0
					if( tc.getStatus( ) == 0 )
						// siguiente
						continue ;
					
//					System.out.println( "Nombre: " + tc.getNombre( ) ) ;
//					System.out.println( "Tam: " + tc.getTblCuentas( ).size( ) ) ;
//					
					List< TblCuenta > cuentas = tc.getTblCuentas( ) ;
					
					// en caso de que no sea vacio
					if( cuentas.size( ) > 0 )
					{
//						System.out.println( "Agrega" ) ;
						boolean haveActive = false ;
						
						// recorre tipo de cuentas activas
						for( TblCuenta cuenta : cuentas )
							if( cuenta.getStatus( ) == 1 )
							{
								// activa bandera
								haveActive = true ;
								
								// quiebra ciclo
								break ;
							}
						
						// revisa si tiene cuentas activas
						if( haveActive )
							tipoCuentasRes.add( tc ) ;
					}
				}
				
				System.out.println( "ManejadorPaquetesDeAsset.java: CountTypesSize/" + tipoCuentasRes.size( ) ) ;
				
				setCountTypes( tipoCuentasRes ) ;
			}catch( MasterCardException mce )
			{
//				MasterCardDAO.closeEntityManager( ) ;
			}
			
		}
	}
	
	
	
}
